import axios from 'axios'
import {useRouter} from 'vue-router'
// 这是一个提示框组件，注意他是一个函数组件，所以组件也需要额外导入，因为函数形式的组件不会按需导入
// 引入 Notify 样式组件
import { Notify } from 'vant';
let baseURL = ''
switch (process.env.NODE_ENV) {
    case 'production':
        baseURL = 'http://121.89.205.189:3000/api';
        break;
    case 'development':
        // baseURL = '/api'
        baseURL ='http://47.94.148.165:3001/api'   // 直接写这个地址则不用再vite.config.ts中进行请求代理
        break;
}
// 做一个默认的请求配置
const instance = axios.create({
    baseURL: baseURL,
    timeout: 5000,
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // console.log('config',config);
    // 一般在此处设置token： 在header 头中设置token
    if(localStorage.getItem('token')){
      if(config&&config.headers){
        config.headers.token=localStorage.getItem('token')
      }
    }
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    // console.log('response',response);
    if(response.data&&response?.data?.code==200){
      // 如果后端接口返回 有token 数据,就将token 数据保存到保存到本地,
      // 作为一个token 有效期的的一个验证   （更新本地token）

      // 登录接口也走响应拦截器
      // 注意：第一次请求登录接口的时候，在此处可将token保存到本地，就不用在登录成功时重新将token保存到本地了

      // 登录接口保存token,其他接口更新token
      if(response?.data?.data?.token){
        // 当返回的数据中有token时，将token存到本地
        // 注意：没有token 返回时，会将token赋值为undefined
        localStorage.setItem('token',response?.data?.data?.token)
      }
    }else{
      // 如果后端返回的状态码是10119,表示token 失效,返回到登录页
      if(response.data?.code=='10119'){
        // 移除本地存储的token
        localStorage.removeItem('token')
        // 重新登陆
        const router=useRouter()
        router.push('/login')
      }
    } 
    // 根据响应状态码设置信息提示   将后端的message 信息作为一个提示
    Notify({ type: response.data?.code==200?'success':'danger', message: response.data?.message });
    return response.data;
  }, function (error) {
    // 对响应错误做点什么
    // 此处服务器没有响应,可能是断网了或者服务器宕机了.
    return Promise.reject(error);
  });
export default instance